home *** CD-ROM | disk | FTP | other *** search
/ SGI Enlighten DSM 3.1 / SGI EnlightenDSM 3.1.iso / SCO5X / EMD / bin / e_audit_report < prev    next >
Text File  |  1999-04-16  |  4KB  |  253 lines

  1. #!/bin/sh
  2. #  Copyright (c) 1990-1999 Enlighten Software Solutions, Inc.
  3. #             -- All Rights Reserved --
  4.  
  5. OSNAME=`uname -s`
  6. EMDDIR=`egrep "emd_dir=" /etc/enlighten | cut "-d=" -f2 - `
  7. EDATE=$EMDDIR/bin/e_date
  8. DBIF=$EMDDIR/informix/bin/dbaccess
  9. DBNAME=enlighten
  10. TBLNAME=audit_log_tbl
  11.  
  12. totalinput=$#
  13. managednum=0
  14. usernum=0
  15. guinum=0
  16. argmt=0
  17. value=0
  18. where=0
  19. flag=0
  20.  
  21. case $OSNAME in
  22.     AIX)
  23.             AWK=nawk;;
  24.     HP-UX)
  25.             AWK=awk;;
  26.     IRIX*)
  27.             AWK=nawk;;
  28.     SunOS)
  29.             AWK=nawk;;
  30. esac
  31.  
  32. incrargmt() {
  33.     argmt=`expr $argmt + 1`;
  34. }
  35.  
  36. incrvalue() {
  37.     value=`expr $value + 1`;
  38. }
  39.  
  40. addparen() {
  41.     sqlstmt="$sqlstmt)";
  42. }
  43.  
  44. appendstmt() {
  45.     if [ $where -eq 1 ]; then
  46.         sqlstmt="$sqlstmt and"
  47.     else
  48.         where=1
  49.         sqlstmt="$sqlstmt where"
  50.     fi;
  51. }
  52.  
  53. createlist() {
  54.  
  55.     if [ $1 -eq 1 ]; then
  56.         sqlstmt="$sqlstmt,"
  57.     elif [ "$2" = "guinum" ];then
  58.         guinum=1 
  59.         sqlstmt="$sqlstmt guihost in ("
  60.     elif [ "$2" = "managednum" ]; then
  61.         managednum=1
  62.         sqlstmt="$sqlstmt targethost in ("
  63.     elif [ "$2" = "usernum" ]; then
  64.         usernum=1
  65.         sqlstmt="$sqlstmt usr in ("
  66.     fi
  67. }
  68.  
  69. while [ $# -gt 0 ]
  70. do
  71.     case $1 in
  72.         -from)
  73.             arg=-from
  74.             incrargmt;;
  75.         -to)
  76.             arg=-to
  77.             incrargmt;;
  78.         -guihost)
  79.             arg=-guihost
  80.             incrargmt;;
  81.         -managedhost)
  82.             arg=-managedhost
  83.             incrargmt;;
  84.         -dsmuser)
  85.             arg=-dsmuser
  86.             incrargmt;;
  87.         *)
  88.             case $arg in
  89.                 -from)
  90.                     fromtime=$fromtime" $1";;
  91.                 -to)
  92.                     totime=$totime" $1";;
  93.                 -guihost)
  94.                     guihost=$guihost" $1";;
  95.                 -managedhost)
  96.                     managedhost=$managedhost" $1";;
  97.                 -dsmuser)
  98.                     dsmuser=$dsmuser" $1";;
  99.             esac;;
  100.     esac
  101.     shift
  102. done
  103.  
  104. sqlstmt='select * from '$TBLNAME 
  105.  
  106. if [ "$fromtime" ]; then
  107.     if [ \( "$fromtime" = " Beginning" \) -o \( "$fromtime" = " beginning" \) ]; then
  108.         incrvalue
  109.     else
  110.         fromempty=`$EDATE -s $fromtime`
  111.         if [ "$fromempty" ]; then
  112.             incrvalue
  113.             appendstmt
  114.             sqlstmt="$sqlstmt timestamp >= $fromempty"
  115.         fi
  116.     fi
  117. fi
  118. if [ "$totime" ]; then
  119.     if [ \( "$totime" = " Now" \) -o \( "$totime" = " now" \) ]; then
  120.         incrvalue
  121.     else
  122.         toempty=`$EDATE -s $totime`
  123.         if [ "$toempty" ]; then
  124.             incrvalue
  125.             appendstmt
  126.             sqlstmt="$sqlstmt timestamp <= $toempty"
  127.         fi
  128.     fi
  129. fi
  130. if [ "$guihost" ]; then
  131.     incrvalue
  132.     appendstmt
  133.     for GH in $guihost
  134.     do
  135.         createlist $guinum guinum
  136.         sqlstmt="$sqlstmt '$GH'"
  137.     done
  138.     addparen
  139. fi
  140. if [ "$managedhost" ]; then
  141.     incrvalue
  142.     appendstmt 
  143.     for MH in $managedhost
  144.     do
  145.         createlist $managednum managednum
  146.         sqlstmt="$sqlstmt '$MH'"
  147.     done
  148.     addparen
  149. fi
  150. if [ "$dsmuser" ]; then
  151.     incrvalue
  152.     appendstmt
  153.     for USER in $dsmuser
  154.     do
  155.         createlist $usernum usernum
  156.         sqlstmt="$sqlstmt '$USER'"
  157.     done
  158.     addparen
  159. fi
  160. sqlstmt="$sqlstmt order by timestamp"
  161.  
  162.  
  163. if [ $argmt -eq 0 ]; then
  164.     if [ $value -eq 0 ]; then
  165.         if [ $totalinput -gt 0 ]; then
  166.             flag=1
  167.         fi
  168.     fi
  169. fi
  170.  
  171.  
  172. if [ \( $argmt -ne $value \) -o \( $flag -eq 1 \) ]; then
  173.     echo ""
  174.     echo "usage:"
  175.     echo "e_audit_report    [-from time-string | beginning]"
  176.     echo "        [-to time-string | now]"
  177.     echo "        [-guihost hostname]"
  178.     echo "        [-managedhost hostname]"
  179.     echo "        [-dsmuser username]" 
  180.     exit 1
  181. fi
  182.  
  183. name=`id | grep root`
  184. sudb="su - dbenl"
  185.  
  186. if [ "$name" ]; then
  187. echo "$sqlstmt" | $sudb -c "$DBIF $DBNAME - 2> /dev/null" | $AWK -v e_date=$EDATE ' 
  188. BEGIN {
  189.     FMTSTR  = "%-26s  %-22s  %-20s  %s\n";
  190.     HEADING = "%-26s  %-22s  %-20s  %-40s\n";
  191.     printf(HEADING, "Time",
  192.                     "User@Host",
  193.                     "Target Host",
  194.                     "Event");  
  195.     printf(HEADING, "--------------------------",
  196.                     "----------------------",
  197.                     "--------------------",
  198.                     "----------------------------------------");
  199. }
  200.  
  201. NF == 0 {
  202.     next
  203. }
  204.  
  205. $1 ~ /timestamp/ {
  206.     cmd = e_date" -d " strip_field_one($0)
  207.     cmd | getline timestamp
  208. }
  209.  
  210. $1 ~ /targethost/ {
  211.     targethost = strip_field_one($0)
  212. }
  213.  
  214. $1 ~ /guihost/ {
  215.     guihost = strip_field_one($0)
  216. }
  217.  
  218. $1 ~ /usr/ {
  219.     usr = strip_field_one($0)
  220. }
  221.  
  222. $1 ~ /msg/ {
  223.     msg = strip_field_one($0);
  224.     who = usr "@" guihost
  225.     recnum++
  226.     printf(FMTSTR, timestamp, who, targethost, msg ); 
  227.     close(cmd)
  228. }
  229.  
  230. END {
  231.     printf("\n");
  232.     printf("Total number of records: %d\n", recnum);
  233. }
  234.  
  235. function strip_field_one(s) {
  236.  
  237.     n = split(s, a);
  238.     t = "";
  239.  
  240.     for (i=2; i<=n; i++) {
  241.         t =  t a[i];
  242.         if (i < n) {
  243.             t = t " ";
  244.         }
  245.     }
  246.     return t;
  247. }'
  248.  
  249. else
  250.     echo "Root permission required to run script."
  251.     exit 1
  252. fi
  253.